import Socket from 'socketjs-client'
import Stomp from 'stompjs'
import Cookies from 'js-cookie'
import store from '../../store'
import { get } from '@/utils'

/**
 * webSocket 通讯
 *
 * @author  阳坤
 * @time    2022年12月3日
 ** */

class socketSdk {
  constructor(options) {
    // 用户信息
    this.userInfo = {
      name: get(store, 'state.user.userInfo.userId') || options.name,
      username: get(store, 'state.user.userInfo.userId') || options.username, // 15162172925
      Authorization: Cookies.get('Authorization')
    }
    this.stompClient = {} //该客户端对象
  }

  /**
   * 连接服务器
   *
   **/
  socketConnect = () => {
    // 建立连接对象（还未发起连接）   ws  请求使用WebSocket ，http使用socketjs
    const socket = new WebSocket('ws://192.168.251.5:8062/message/ws')
    // const socket = new Socket({
    //   url: 'ws://192.168.251.5:8062/message/ws', // 必填，链接的通道的地址
    //   heartTime: 5000, // 必填，心跳时间间隔（毫秒）
    //   reconnectTime: 5000, // 非必填，默认5000，重连时间间隔（毫秒）
    //   reconnectCount: 5 // 非必填，默认5，重连次数，-1则不限制
    // })
    // 获取 STOMP 子协议的客户端对象
    this.stompClient = Stomp.over(socket)
    this.stompClient.debug = function (str) {}
    // 向服务器发起websocket连接并发送CONNECT帧

    console.log('socket-header', this.userInfo)

    this.stompClient.connect(
      this.userInfo,
      function connectCallback(frame) {
        // 连接成功时（服务器响应 CONNECTED 帧）的回调方法
        console.log('连接成功', frame)
        //获取用户订阅权限以及订阅频道
      },
      function errorCallBack(error) {
        // 连接失败时（服务器响应 ERROR 帧）的回调方法
        console.error(error)
        console.log('连接失败')
      }
    )
  }
}

function createMqttSocket(options) {
  return new socketSdk(options)
}

export default createMqttSocket
